package 静态代码块;

/**
 * @projectName: com.xiayuanxing.designPattern
 * @className: SingletonTest02
 * @author: xiayuanxing
 * @description: TODO
 * @date: 2021/12/14 17:27
 * @version: 1.0
 */
public class SingletonTest02 {

    // 1)这种方式和上面的方式其实类似，只不过将类实例化的过程放在了静态代码块中，也是在类装载的时候，
    // 就执行静态代码块中的代码，初始化类的实例。优缺点和上面是一样的。
    // 2)结论：这种单例模式可用，但是可能造成内存浪费

    public static void main(String[] args) {

        Singletion2 singletion1 = Singletion2.getInstance();
        Singletion2 singletion2 = Singletion2.getInstance();
        System.out.println(singletion1==singletion2);
        System.out.println(singletion1.hashCode());
        System.out.println(singletion2.hashCode());

    }
}


class  Singletion2{
    //1.构造器私有化（防止new
    private Singletion2(){

    };

    //2.通过静态代码块类的内部创建对象
    private final static Singletion2 instance;

    static {
        instance = new Singletion2();
    }

    //3.向外暴露一个静态的公共方法
    public static Singletion2 getInstance(){
        return instance;
    }


}
